package com.myfactoryMethod;

/**
 * 客户端
 * @author yulipeng
 *
 */
public class ZMainTest {

	public static void main(String[] args) {
		// 原始方式：
		// 每需要一种手机，就要自己创建new一个；
		Phone phone = new HuaweiPhone();
		phone.phone();
		
		// 改进方式1：
		// 将具体的手机放在工厂中创建new，而不是客户端创建；
		// >> 具体产品与客户端剥离，责任划分；
		PhoneFactory factory = new PhoneFactory();
		Phone phone2 = factory.getPhone("huawei");
		phone2.phone();
		
		// 改进方式2：
		// 根据反射（reflect）来获取具体手机;
		// 上面方法（如果新增一款品牌，就要不停的写if语句）,比如spring中的beanfactory就是通过该方式实现的；
		Phone phone3 = factory.getPhoneByClass("com.myfactoryMethod.HuaweiPhone");
		phone3.phone();
		
		// 改进方式3：
		// 上面方法传入类的全路径比较麻烦，如何通过传入简称即可；
		// 使用配置文件的方式（key:value）将简称和全路径关联起来.这样就更像spring的方式了
		Phone phone4 = factory.getPhoneByPropClass("huawei");
		phone4.phone();
		Phone phone4_1 = factory.getPhoneByPropClass("apple");
		phone4_1.phone();
	}
}
